class OrdenServiciosController < ApplicationController

  # GET /orden_servicios
  # GET /orden_servicios.xml
  require 'prawn'
  require "open-uri"
  def index
    @orden_servicios = OrdenServicio.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @orden_servicios }
    end
  end

  # GET /orden_servicios/1
  # GET /orden_servicios/1.xml
  # GET /orden_servicios/1.pdf
  def show
  	@ip = obtencionip
    @orden_servicio = OrdenServicio.find(params[:id])
    @qr = "http://chart.apis.google.com/chart?chs=220x220&cht=qr&chl=http://" + @ip + ":3000/generadorxml/generadorxml/" + @orden_servicio.id.to_s
    @paquete = Paquete.all(:conditions => {:orden_servicio_id =>  @orden_servicio.id})
    @compania = Compania.find(:first)
    @cliente = Cliente.all(:conditions => {:id => session[:cliente_id]} ).first
    OrdenServicio.calculo_total(@orden_servicio.id)
    @subtotal = @orden_servicio.total.to_f - @orden_servicio.iva.to_f
    @titulofactura = "Factura"
    @datosfactura = "\n\n\n\n\n\n" + "Nombre: " + session[:cliente_nombre] + "\n" + "Apellido: " + session[:cliente_apellido]+ "\n" + "Correo: " + session[:cliente_correo] + "\n\n\n" + "Compania " + @compania.nombre + "\n\n\n"
    Prawn::Document.generate('Factura.pdf', :page_layout => :portrait) do |pdf|
      pdf.font "#{Prawn::BASEDIR}/data/fonts/Dustismo_Roman.ttf"
      logo = "#{RAILS_ROOT}/public/images/LogoFactura.jpg"
      pdf.image logo, :at => [5,750], :width => 300
      pdf.stroke do
        pdf.rectangle [5,650], 530, 600
      end
      pdf.indent(50,50) do
        pdf.text "\n\n\n" + @titulofactura, :align => :center
      end

      pdf.indent(375) do
        pdf.text "\n\n\n" + "#{Time.now.utc}"
      end

      pdf.indent(50) do
        pdf.text @datosfactura
        data = [["Factura#:" ,"000"+"#{@orden_servicio.id}"],
          ["Fecha:", "#{@orden_servicio.fecha_orden}"],
          ["Receptor:", "#{@orden_servicio.nombre_receptor} #{@orden_servicio.apellido_receptor}"]]
        pdf.table(data,:cell_style => { :borders => [] }) do |tablaFactura|
          tablaFactura.rows(1..3)
        end

        pdf.image open("#{@qr}"), :at => [350,200], :width => 125
      end
    end
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @orden_servicio }
      format.pdf { render :format => false, :attachment => false }
    end
  end

  # GET /orden_servicios/new
  # GET /orden_servicios/new.xml
  def new
  	@orden_servicio = OrdenServicio.new
    @direccions = Direccion.all(:conditions => {:cliente_id => session[:cliente_id]} )
    #    @direccions = Direccion.find_by_sql("Select d.nombre, d.id from direccions d, clientes c where d.cliente_id ='"+session[:cliente_id].to_s+"'")
    @orden_servicio.paquetes.build
    @orden_servicio.compania_id = Compania.find(:first)
    #    @compania = params['1']
    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @orden_servicio }
    end
  end

  # GET /orden_servicios/1/edit
  def edit
    @orden_servicio = OrdenServicio.find(params[:id])
  end

  # POST /orden_servicios
  # POST /orden_servicios.xml
  def create
    @orden_servicio = OrdenServicio.new(params[:orden_servicio])
    respond_to do |format|
      if @orden_servicio.save
        @etapa = Etapa.new
        @etapa.descripcion = "Preparada para el envio"
        @etapa.fecha = Time.now.utc
        @etapa.lugar = "GGN Express, Oficina Principal, Los Palos Grandes"
        @etapa.orden_servicio_id = @orden_servicio.id
        @etapa.save
        flash[:notice] = 'La orden de servicio fue creada exitosamente'
        format.html { redirect_to(@orden_servicio) }
        format.xml  { render :xml => @orden_servicio, :status => :created, :location => @orden_servicio }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @orden_servicio.errors, :status => :unprocessable_entity }
      end
    end
  end

  # PUT /orden_servicios/1
  # PUT /orden_servicios/1.xml
  def update
    @orden_servicio = OrdenServicio.find(params[:id])
    respond_to do |format|
      if @orden_servicio.update_attributes(params[:orden_servicio])
        flash[:notice] = 'La orden de servicio ha sido actualizada exitosamente'
        format.html { redirect_to(@orden_servicio) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @orden_servicio.errors, :status => :unprocessable_entity }
      end
    end
  end

  # DELETE /orden_servicios/1
  # DELETE /orden_servicios/1.xml
  def destroy
    @orden_servicio = OrdenServicio.find(params[:id])
    @orden_servicio.destroy

    respond_to do |format|
      format.html { redirect_to(orden_servicios_url) }
      format.xml  { head :ok }
    end
  end

  def modificar_ordenes
    @orden_servicio = params[:enviar]
    puts params[:enviar]
    @empleado = params[:empleado]
    $empleadoid


    @empleado.each do |empleado|
      if empleado[1] != 'no'
        @empleado = Empleado.find(empleado[1])
        @empleado.disponibilidad = "No Disponible"
        @empleado.save
        $empleadoid = empleado[1]
      end
    end

    
    
    @orden_servicio.each do |orden_servicio|
      if orden_servicio[1] != 'no'
        @orden_servicio = OrdenServicio.find(orden_servicio[1])
        @orden_servicio.estatus = "Asignada para Recoleccion"
        @orden_servicio.save

        @ruta = Ruta.new
        @ruta.empleado_id = $empleadoid
        @ruta.orden_servicio_id = orden_servicio[1]
        @ruta.save

        @etapa = Etapa.new
        @etapa.descripcion = "Asignada para Recoleccion"
        @etapa.fecha = Time.now.utc
        @etapa.lugar = "GGN Express, Oficina 1, Los Palos Grandes"
        @etapa.orden_servicio_id = orden_servicio[1]
        @etapa.save
        
      end
 
    end
    if (@orden_servicio == nil)
      flash[:notice] = 'No ha seleccionado ninguna orden'
      redirect_to(asignar_rutas_path)
    else
      flash[:notice] = 'La orden fue asignada exitosamente'
      redirect_to(asignar_rutas_path)
    end
  end

  def recolectar
    @trackingid = params[:tracking]
        sql = ActiveRecord::Base.connection();
#        sql.execute "SET autocommit=0";
#        sql.begin_db_transaction
#        id, value =
#        sql.update "UPDATE `basedatosggn`.`orden_servicios` SET `estatus` = 'Recolectada' WHERE `orden_servicios`.`traking` ="+@trackingid.to_s+""
#        sql.delete "DELETE from rutas where orden_servicio_id in (select o.id from orden_servicios o where o.traking="+@trackingid.to_s+")"
#        sql.update "UPDATE empleados set disponibilidad='Disponible' where id not in (select empleado_id from rutas)"
#        sql.commit_db_transaction
#        value;
    #@orden_servicio = OrdenServicio.find(:first, :conditions  => {["traking = ?", @trackingid], ["estatus = ?", "Asignada para Recoleccion"]})
    @orden_servicio = OrdenServicio.find_by_sql("select * from orden_servicios where estatus = 'Asignada para Recoleccion' and traking ='"+@trackingid.id.to_s+"'")
    @orden_servicio.each do |orden_servicio|
      orden_servicio.estatus = 'Recolectada'
      orden_servicio.save
      
    end
    


    @ruta = Ruta.find_by_sql("select * from rutas where orden_servicio_id ='"+@orden_servicio.id.to_s+"'")
    @ruta.each do |ruta|
      ruta.destroy
    end

    @empleado =  Empleado.find_by_sql("select * from empleados where id not in(select empleado_id from rutas)")
    @empleado.each do |empleado|
      empleado.disponibilidad = 'Disponible'
      empleado.save
    end
    
#

    #@orden_servicio = OrdenServicio.find(:first, :conditions  => ["traking = ?", @trackingid])
   #@direccions = Direccion.find(:conditions => ["id = ?" => @orden_servicio.direccion_id])
    @direccion = Direccion.find(:first,:conditions => ["id = ?" => @orden_servicio.direccion_id])
    @etapa = Etapa.new
    @etapa.descripcion = "Recolectada"
    @etapa.fecha = Time.now.utc
    @etapa.lugar = "#{@direccion.nombre}" + "," + "#{@direccion.urbanizacion}" + "," + "#{@direccion.ciudad}"
    @etapa.orden_servicio_id = @orden_servicio.id
    @etapa.save

  end
end
